package com.woshua.svgmodel.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.widget.Toast;

import com.woshua.svgmodel.svgutils.SVG;
import com.woshua.svgmodel.svgutils.SVGParser;

public class SvgShapeBitmapUtil {
    /*
     * svg convert to bitmap
     * */
    public static Bitmap getSvgBitmap(Context context, int width, int height, int svgRawResourceId) {
        //創建一個空白图片，然后加载到一个画布上
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        //绘制，如果传入了一个错误的id，就弹出Toast报错
        if (svgRawResourceId > 0) {
            //从资源文件里提取自己的svg样式图片
            SVG svg = SVGParser.getSVGFromInputStream(context.getResources().openRawResource(svgRawResourceId),
                    width, height);
            //将svg图片画在刚刚建立的画布上
            canvas.drawPicture(svg.getPicture());
        } else {
            Toast.makeText(context, "错误的图片样式", Toast.LENGTH_SHORT).show();
        }
        return bitmap;
    }

    /*
     * 根据svg形状图和原图合成最终的形状图形
     * svg图在下，原图在上
     * */
    public static Bitmap getSvgShapeBitmap(Context context, Bitmap fg, int svgResourceId) {
        //用一个正方形裁剪原图
        //获取原图里最大的正方形的值  原图宽和高里的最小值，就是原图里最大的正方形的边长
        int size = Math.min(fg.getWidth(), fg.getHeight());
        //正方形居中的时候的左上角的坐标
        int x = (fg.getWidth() - size) / 2;
        int y = (fg.getHeight() - size) / 2;
        //加载svg图片,图片宽高和原图里裁剪出来的正方形的边长一致
        Bitmap bg = getSvgBitmap(context, size, size, svgResourceId);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        //新建空白图片的画布用来合成svg图片和形状
        Canvas canvas = new Canvas(bitmap);
        //绘制svg形状作为src
        canvas.drawBitmap(bg, new Matrix(), paint);
        //取下层非交集部分和上层交集部分,原图在上，svg在下
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
        //绘制原图作为dst
        canvas.drawBitmap(Bitmap.createBitmap(fg,x, y, size, size), new Matrix()
                , paint);
        return bitmap;
    }
}